from src.module.Model import Model
from langchain_core.messages import HumanMessage
from langchain_core.prompts import ChatPromptTemplate


class Prompts(Model):

    # 格式化消息内容
    def from_message(self):
        prompts = ChatPromptTemplate.from_messages([
            ('system', '你现在是一个翻译助手，请将我输入的内容翻译为{language}'),
            ('user', 'hello world! ')
        ])
        # from_messages 格式化的提示词，采用 chain 链式调用或者 invoke 后传递给大模型，不可直接传递给大模型, 使用场景：在多轮对话方面
        response = self.model.invoke(prompts.invoke({ 'language': '中文' }))
        print(response)

    # 格式化模板内容
    def from_template(self):
        prompts = ChatPromptTemplate.from_template(""" 现在你是一名翻译助手，请将{word} 翻译为中文。 """)

        # from_template 格式化的提示词，采用 chain 链式调用或者 invoke 后传递给大模型，不可直接传递给大模型, 使用场景：agent、非多轮对话方面
        response = self.model.invoke(prompts.invoke({ 'word': 'hello world' }))
        print(response)

    # 格式化占位符
    def placeholder(self):
        # message placeholder 格式化占位符
        prompts = ChatPromptTemplate.from_messages([
            ('system', '你现在是一个翻译助手，请将我输入的内容翻译为{language}'),

            ## 下面的这两种都是一样的效果
            # MessagesPlaceholder('question')
        ])
        prompts.append(('placeholder', '{question}'))
        response = self.model.invoke(prompts.invoke({"question": [HumanMessage(content='hello world! ')], "language": '中文'}))
        print(response)

    def start(self):
        # self.from_message()
        # self.from_template()
        self.placeholder()

